package com.mz.ozy.utils;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;

import com.alipay.sdk.app.PayTask;
import com.mz.ozy.bean.EventBean;
import com.mz.ozy.constants.Constants;
import com.socks.library.KLog;
import com.tencent.mm.opensdk.modelpay.PayReq;

import org.greenrobot.eventbus.EventBus;
import org.json.JSONObject;

import java.util.Map;

/**
 * 支付工具类
 * 调第三方支付的入口有：
 * 开通会员、确认订单、订单支付、充值
 * 所以通过EventBus发送结果的时候，应该给最近一次的支付发消息
 */
public class PayManager {

    public static int pay_from;  //1-开通会员  2-确认订单 3-订单支付 4-充值  5-时卡
    private Activity mActivity;

    public PayManager(Activity activity) {
        mActivity = activity;
    }

    /********************************* 微信支付  ********************************/
    public void handleWxPay(JSONObject json) {
        PayReq request = new PayReq();
        request.appId = json.optString("appid");
        request.partnerId = json.optString("mch_id");           //商户id
        request.prepayId = json.optString("prepay_id");         //预支付交易会话ID
        request.packageValue = json.optString("package");        //扩展字段
        request.nonceStr = json.optString("nonce_str");         //随机字符串
        request.timeStamp = json.optString("timestamp");       //时间戳
        request.sign = json.optString("sign");
        if (!Constants.sWxApi.sendReq(request)) {
            ToastUtils.showToast("网络数据返回异常，调用微信支付失败，请稍后再试");
        }
    }

    /*************************************** 支付宝支付 *****************************************/

    /**
     * 执行支付宝支付，拉起弹窗
     *
     * @param orderInfo 订单信息，服务器封装
     **/
    public void handleAliPay(final String orderInfo) {
        Runnable payRunnable = new Runnable() {
            @Override
            public void run() {
                PayTask alipay = new PayTask(mActivity);
                Map<String, String> result = alipay.payV2(orderInfo, true);
                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };
        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

    private static final int SDK_PAY_FLAG = 1;
    @SuppressLint("HandlerLeak")
    private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    @SuppressWarnings("unchecked")
                    PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                    KLog.e("payResult", payResult.toString());
                    /**
                     对于支付结果，请商户依赖服务端的异步通知结果。同步通知结果，仅作为支付结束的通知。
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息
                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为9000则代表支付成功
                    if (TextUtils.equals(resultStatus, "9000")) {
                        // 该笔订单是否真实支付成功，需要依赖服务端的异步通知。
                        EventBus.getDefault().post(new EventBean(Constants.EventCode.ALIPAY_PAY_SUCCESS, null));
                    } else {
                        // 该笔订单真实的支付结果，需要依赖服务端的异步通知。
                        ToastUtils.showToast("支付失败");
                    }
                    break;
                }

                default:
                    break;
            }
        }
    };


}
